﻿Public Class xtf_ABMcliente
    Dim frm_listado As Object = Nothing
    Dim ulg_row As DataRow
    Dim obj_cliente As cls_cliente_ = Nothing

    Dim dtt_clientearticulo_ As DataTable
    Dim dtt_clientevehiculo_ As DataTable

    Public Sub New()
        InitializeComponent()
        CargarCondicionIva_()
        CargarTipoDocumento_()
        CargarTipo_()
        CargarCategoria_()
        CargarAgrupacion_()
        CargarformaPago_()
        CargarVendedor_()
        CargarCobrador_()
        Cargardenominacion_()
        Cargararticulo_()
        Cargarvehiculo_()
        btn_Acceso.Visible = True
        liv_Direcciones.Tag = New DevExpress.XtraEditors.Controls.ListBoxItemCollection
        liv_Emails.Tag = New DevExpress.XtraEditors.Controls.ListBoxItemCollection
        liv_Telefonos.Tag = New DevExpress.XtraEditors.Controls.ListBoxItemCollection
        liv_TerceroRelaciones.Tag = New DevExpress.XtraEditors.Controls.ListBoxItemCollection
        liv_Usuarios.Tag = New DevExpress.XtraEditors.Controls.ListBoxItemCollection
        liv_TerceroSubCategorias.Tag = New DevExpress.XtraEditors.Controls.ListBoxItemCollection
        liv_TerceroAgrupaciones.Tag = New DevExpress.XtraEditors.Controls.ListBoxItemCollection
        AgregarValidaciones()
        Dim obj_config_parametro As New cls_config_parametro_
        lbl_subcodigo1.Text = obj_config_parametro.obtener("nombreSubCodigo1")
        lbl_subcodigo2.Text = obj_config_parametro.obtener("nombreSubCodigo2")
        lbl_subcodigo3.Text = obj_config_parametro.obtener("nombreSubCodigo3")

        Dim parametro As New cls_config_parametro_
        If CBool(parametro.Buscar("codigoAutomatico").valor) Then
            txt_Codigo.Properties.ReadOnly = True
        End If


        'Prepara grid y datasource proveedorarticulo----------------------------------------------------
        gdv_clientearticulo_.Tag = New Collections.Generic.List(Of cls_clientearticulo_)
        dtt_clientearticulo_ = New DataTable
        dtt_clientearticulo_.Columns.Add("idarticulo", GetType(Integer))
        dtt_clientearticulo_.Columns.Add("Articulo", GetType(String))
        dtt_clientearticulo_.Columns.Add("Valor general", GetType(Decimal))
        dtt_clientearticulo_.Columns.Add("Valor cliente", GetType(Decimal))
        dtt_clientearticulo_.Columns.Add("Objeto", GetType(Object))

        gdc_clientearticulo_.DataSource = dtt_clientearticulo_
        gdc_clientearticulo_.ForceInitialize()

        gdv_clientearticulo_.PopulateColumns()
        gdv_clientearticulo_.Columns("Objeto").Visible = False
        gdv_clientearticulo_.Columns("idarticulo").Visible = False

        gdv_clientearticulo_.Columns("Valor general").DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric
        gdv_clientearticulo_.Columns("Valor general").DisplayFormat.FormatString = "n" & int_cantdecimales
        gdv_clientearticulo_.Columns("Valor cliente").DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric
        gdv_clientearticulo_.Columns("Valor cliente").DisplayFormat.FormatString = "n" & int_cantdecimales

        gdv_clientearticulo_.OptionsView.ShowColumnHeaders = True
        gdv_clientearticulo_.OptionsBehavior.Editable = True
        gdv_clientearticulo_.Columns("Articulo").OptionsColumn.AllowEdit = False
        gdv_clientearticulo_.Columns("Valor general").OptionsColumn.AllowEdit = False
        gdv_clientearticulo_.Columns("Objeto").OptionsColumn.AllowEdit = False
        gdv_clientearticulo_.Columns("Valor cliente").ColumnEdit = New DevExpress.XtraEditors.Repository.RepositoryItemTextEdit
        CType(gdv_clientearticulo_.Columns("Valor cliente").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemTextEdit).Mask.EditMask = "n2" '& int_cantdecimales
        CType(gdv_clientearticulo_.Columns("Valor cliente").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemTextEdit).Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.Numeric
        CType(gdv_clientearticulo_.Columns("Valor cliente").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemTextEdit).Mask.UseMaskAsDisplayFormat = True
        CType(gdv_clientearticulo_.Columns("Valor cliente").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemTextEdit).AllowNullInput = DevExpress.Utils.DefaultBoolean.False

        '-----------------------------------------------------------------------------------------------

        'Prepara grid y datasource clientevehiculo----------------------------------------------------
        gdv_clientevehiculo_.Tag = New Collections.Generic.List(Of cls_clientevehiculo_)
        dtt_clientevehiculo_ = New DataTable
        dtt_clientevehiculo_.Columns.Add("Icono", GetType(Image))
        dtt_clientevehiculo_.Columns.Add("Vehiculo", GetType(String))
        dtt_clientevehiculo_.Columns.Add("Objeto", GetType(Object))

        gdc_clientevehiculo_.DataSource = dtt_clientevehiculo_
        gdc_clientevehiculo_.ForceInitialize()

        gdv_clientevehiculo_.PopulateColumns()
        gdv_clientevehiculo_.Columns("Objeto").Visible = False
        gdv_clientevehiculo_.Columns("Icono").ColumnEdit = New DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit
        gdv_clientevehiculo_.Columns("Icono").Caption = " "
        CType(gdv_clientevehiculo_.Columns("Icono").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit).NullText = " "
        gdv_clientevehiculo_.Columns("Icono").MaxWidth = 8
        '-----------------------------------------------------------------------------------------------

    End Sub

    Public Overrides Sub CargarObjetos()
        CargarCondicionIva_()
        CargarTipoDocumento_()
        'CargarTipo_()
        Cargardenominacion_()
        CargarCategoria_()
        CargarAgrupacion_()
        CargarformaPago_()
        CargarVendedor_()
        CargarCobrador_()
        Cargararticulo_()
        Cargarvehiculo_()
    End Sub

    Private Sub CargarAgrupacion_()
        liv_Agrupaciones.Items.Clear()
        Dim Agrupacion_ As New cls_agrupacion_
        If Agrupacion_.CargarTodos Then
            For Each Agrupacion As cls_agrupacion_ In Agrupacion_.Items
                Dim Elemento As New CustomListItem
                Elemento.objeto = Agrupacion
                Elemento.text = Agrupacion.ToString
                liv_Agrupaciones.Items.Add(Elemento)
            Next
            liv_Agrupaciones.Enabled = True
        Else
            liv_Agrupaciones.Enabled = False
        End If
    End Sub

    Private Sub Cargararticulo_()
        Dim tmp_obj As Integer = 0
        tmp_obj = cbo_articulo.EditValue

        Dim articulo_ As New cls_articulo_
        articulo_.CargarTodos()
        cargarCombo(cbo_articulo, articulo_.Items)
        cbo_articulo.EditValue = IIf(tmp_obj <> 0, tmp_obj, cbo_articulo.EditValue)
    End Sub


    Private Sub Cargarvehiculo_()
        Dim tmp_obj As Integer = 0
        tmp_obj = cbo_vehiculo.EditValue

        Dim vehiculo_ As New cls_vehiculo_
        vehiculo_.CargarTodos()
        cargarCombo(cbo_vehiculo, vehiculo_.Items)
        cbo_vehiculo.EditValue = IIf(tmp_obj <> 0, tmp_obj, cbo_vehiculo.EditValue)
    End Sub


    Private Sub CargarTipo_()
        cargarCombo(cbo_TipoProveedor, GetType(cls_cliente_.enu_tipocliente))
    End Sub

    Private Sub CargarCategoria_()
        liv_Categorias.Items.Clear()
        Dim categoria_ As New cls_categoria_
        If categoria_.CargarTodos Then
            For Each categoria As cls_categoria_ In categoria_.Items
                Dim Elemento As New CustomListItem
                Elemento.objeto = categoria
                Elemento.text = categoria.ToString
                liv_Categorias.Items.Add(Elemento)
            Next
            liv_Categorias.Enabled = True
        Else
            liv_Categorias.Enabled = False
        End If
    End Sub

    Private Sub CargarSubCategoria_()
        If liv_Categorias.SelectedItems.Count > 0 Then
            liv_SubCategorias.Items.Clear()
            Dim subcategoria_ As New cls_subcategoria_
            If subcategoria_.CargarXidcategoria(CType(liv_Categorias.SelectedItems(0).objeto, cls_categoria_).idcategoria) Then
                For Each subcategoria As cls_subcategoria_ In subcategoria_.Items
                    Dim Elemento As New CustomListItem
                    Elemento.objeto = subcategoria
                    Elemento.text = subcategoria.ToString
                    liv_SubCategorias.Items.Add(Elemento)
                Next
                liv_SubCategorias.Enabled = True
            Else
                liv_SubCategorias.Enabled = False
            End If
        End If
    End Sub

    Private Sub CargarCondicionIva_()
        Dim tmp_obj As Integer = 0
        tmp_obj = cbo_CondicionFiscal.EditValue

        Dim condicioniva_ As New cls_condicioniva_
        condicioniva_.CargarTodos()
        cargarCombo(cbo_CondicionFiscal, condicioniva_.Items)
        cbo_CondicionFiscal.EditValue = IIf(tmp_obj <> 0, tmp_obj, cbo_CondicionFiscal.EditValue)
    End Sub


    Private Sub Cargardenominacion_()
        Dim tmp_obj As Integer = 0
        tmp_obj = cbo_denominacion.EditValue

        Dim denominacion_ As New cls_denominacion_
        denominacion_.CargarTodos()
        cargarCombo(cbo_denominacion, denominacion_.Items)
        cbo_denominacion.EditValue = IIf(tmp_obj <> 0, tmp_obj, cbo_denominacion.EditValue)
    End Sub


    Private Sub CargarTipoDocumento_()
        Dim tmp_obj As Integer = 0
        tmp_obj = cbo_TipoDocumento.EditValue

        Dim tipodocumento_ As New cls_tipodocumento_
        tipodocumento_.CargarTodos()
        cargarCombo(cbo_TipoDocumento, tipodocumento_.Items)
        cbo_TipoDocumento.EditValue = IIf(tmp_obj <> 0, tmp_obj, cbo_TipoDocumento.EditValue)
    End Sub

    Private Sub CargarCobrador_()
        Dim tmp_obj As Integer = 0
        tmp_obj = cbo_cobrador.EditValue

        Dim cobrador_ As New cls_cobrador_
        cobrador_.CargarTodos()
        cargarCombo(cbo_cobrador, cobrador_.Items)
        cbo_cobrador.EditValue = IIf(tmp_obj <> 0, tmp_obj, cbo_cobrador.EditValue)
    End Sub

    Private Sub CargarVendedor_()
        Dim tmp_obj As Integer = 0
        tmp_obj = cbo_vendedor.EditValue

        Dim vendedpr_ As New cls_vendedor_
        vendedpr_.CargarTodos()
        cargarCombo(cbo_vendedor, vendedpr_.Items)
        cbo_vendedor.EditValue = IIf(tmp_obj <> 0, tmp_obj, cbo_vendedor.EditValue)
    End Sub

    Private Sub CargarformaPago_()
        Dim tmp_obj As Integer = 0
        tmp_obj = cbo_formaPago.EditValue

        Dim formapago_ As New cls_formapago_
        formapago_.CargarTodos()
        cargarCombo(cbo_formaPago, formapago_.Items)
        cbo_formaPago.EditValue = IIf(tmp_obj <> 0, tmp_obj, cbo_formaPago.EditValue)
    End Sub

    Public Shadows Sub Nuevo(ByRef listado As Form)
        Try
            frm_listado = listado
            Me.Text = CType(frm_listado, xtf_ListadoBase).lbl_modulo.Text & " - Nuevo"
            obj_cliente = New cls_cliente_
            btn_Registro.Enabled = False
            btn_Acceso.Enabled = False

            Dim parametro As New cls_config_parametro_
            Dim Ultimo As New cls_cliente_
            If CBool(parametro.Buscar("codigoAutomatico").valor) Then
                If Ultimo.CargarUltimo Then
                    If IsNumeric(Ultimo.codigo) Then
                        txt_Codigo.Text = Format(Ultimo.codigo + 1, parametro.Buscar("formatoCodigoAutomatico").valor)
                    Else
                        txt_Codigo.Text = Format(1, parametro.Buscar("formatoCodigoAutomatico").valor)
                    End If
                Else
                    txt_Codigo.Text = Format(1, parametro.Buscar("formatoCodigoAutomatico").valor)
                End If
            End If
            

            Me.Show()
        Catch ex As Exception
            'Dim frmError As New frm_ErrorManager(ex.Message)
        End Try
    End Sub

    Public Shadows Sub Modificar(ByRef cliente As cls_cliente_, ByRef listado As Form, ByRef row As DataRow)
        If IsNothing(obj_cliente) Then
            obj_cliente = New cls_cliente_
        End If
        obj_cliente = cliente
        frm_listado = listado
        ulg_row = row : bbi_imprimir.Enabled = True

        Me.Text = CType(frm_listado, xtf_ListadoBase).lbl_modulo.Text & " - " & obj_cliente.ToString
        txt_ID.Text = obj_cliente.idcliente
        txt_Codigo.Text = obj_cliente.codigo
        cbo_cobrador.EditValue = obj_cliente.idcobrador
        cbo_vendedor.EditValue = obj_cliente.idvendedor
        cbo_formaPago.EditValue = obj_cliente.idformapago
        cbo_denominacion.EditValue = obj_cliente.iddenominacion

        txt_Nombres.Text = obj_cliente.tercero.nombres
        txt_Apellido.Text = obj_cliente.tercero.apellido
        txt_RazonSocial.Text = obj_cliente.razonsocial
        txt_NombreFantasia.Text = obj_cliente.nombrefantasia
        txt_NumeroFiscal.Text = obj_cliente.tercero.numerofiscal
        txt_NumeroDocumento.Text = obj_cliente.tercero.numeroducumento
        txt_SitioWeb.Text = obj_cliente.tercero.web
        txt_Observaciones.Text = obj_cliente.tercero.observaciones
        txt_Notas.Text = obj_cliente.tercero.notas
        cbo_TipoProveedor.EditValue = obj_cliente.tipo
        cbo_CondicionFiscal.EditValue = obj_cliente.tercero.idcondicioniva
        cbo_TipoDocumento.EditValue = obj_cliente.tercero.idtipodocumento
        txt_subcodigo1.Text = obj_cliente.tercero.subcodigo1
        txt_subcodigo2.Text = obj_cliente.tercero.subcodigo2
        txt_subcodigo3.Text = obj_cliente.tercero.subcodigo3

        liv_Direcciones.Items.Clear()
        liv_Direcciones.Tag.Clear()
        If Not IsNothing(obj_cliente.tercero.direccion_) Then
            If Not IsNothing(obj_cliente.tercero.direccion_.Items) Then
                For Each direccion As cls_direccion_ In obj_cliente.tercero.direccion_.Items
                    Dim Item As New DevExpress.XtraEditors.Controls.ImageListBoxItem
                    Dim Elemento As New CustomListItem
                    Elemento.objeto = direccion
                    Elemento.text = direccion.ToString
                    If direccion.primario Then
                        Item.ImageIndex = 0
                    End If
                    Item.Value = Elemento
                    liv_Direcciones.Items.Add(Item)
                Next
            End If
        End If

        liv_Telefonos.Items.Clear()
        liv_Telefonos.Tag.Clear()
        If Not IsNothing(obj_cliente.tercero.telefono_) Then
            If Not IsNothing(obj_cliente.tercero.telefono_.Items) Then
                For Each telefono As cls_telefono_ In obj_cliente.tercero.telefono_.Items
                    Dim Item As New DevExpress.XtraEditors.Controls.ImageListBoxItem
                    Dim Elemento As New CustomListItem
                    Elemento.objeto = telefono
                    Elemento.text = telefono.ToString
                    If telefono.primario Then
                        Item.ImageIndex = 0
                    End If
                    Item.Value = Elemento
                    liv_Telefonos.Items.Add(Item)
                Next
            End If
        End If

        liv_Emails.Items.Clear()
        liv_Emails.Tag.Clear()
        If Not IsNothing(obj_cliente.tercero.email_) Then
            If Not IsNothing(obj_cliente.tercero.email_.Items) Then
                For Each email As cls_email_ In obj_cliente.tercero.email_.Items
                    Dim Item As New DevExpress.XtraEditors.Controls.ImageListBoxItem
                    Dim Elemento As New CustomListItem
                    Elemento.objeto = email
                    Elemento.text = email.ToString
                    If email.primario Then
                        Item.ImageIndex = 0
                    End If
                    Item.Value = Elemento
                    liv_Emails.Items.Add(Item)
                Next
            End If
        End If

        liv_TerceroRelaciones.Items.Clear()
        liv_TerceroRelaciones.Tag.Clear()
        If Not IsNothing(obj_cliente.tercero.tercerorelacion_) Then
            If Not IsNothing(obj_cliente.tercero.tercerorelacion_.Items) Then
                For Each tercerorelacion As cls_tercerorelacion_ In obj_cliente.tercero.tercerorelacion_.Items
                    Dim Elemento As New CustomListItem
                    Elemento.objeto = tercerorelacion
                    Elemento.text = tercerorelacion.ToString
                    liv_TerceroRelaciones.Items.Add(Elemento)
                Next
            End If
        End If

        liv_Usuarios.Items.Clear()
        liv_Usuarios.Tag.Clear()
        If Not IsNothing(obj_cliente.tercero.usuario_) Then
            If Not IsNothing(obj_cliente.tercero.usuario_.Items) Then
                For Each usuario As cls_usuario_ In obj_cliente.tercero.usuario_.Items
                    Dim Elemento As New CustomListItem
                    Elemento.objeto = usuario
                    Elemento.text = usuario.ToString
                    liv_Usuarios.Items.Add(Elemento)
                Next
            End If
        End If

        liv_TerceroSubCategorias.Items.Clear()
        liv_TerceroSubCategorias.Tag.Clear()
        If Not IsNothing(obj_cliente.tercero.tercerosubcategoria_) Then
            If Not IsNothing(obj_cliente.tercero.tercerosubcategoria_.Items) Then
                For Each tercerosubcategoria As cls_tercerosubcategoria_ In obj_cliente.tercero.tercerosubcategoria_.Items
                    Dim Elemento As New CustomListItem
                    Elemento.objeto = tercerosubcategoria
                    Elemento.text = tercerosubcategoria.ToString
                    liv_TerceroSubCategorias.Items.Add(Elemento)
                Next
            End If
        End If

        liv_TerceroAgrupaciones.Items.Clear()
        liv_TerceroAgrupaciones.Tag.Clear()
        If Not IsNothing(obj_cliente.tercero.terceroagrupacion_) Then
            If Not IsNothing(obj_cliente.tercero.terceroagrupacion_.Items) Then
                For Each terceroAgrupacion As cls_terceroagrupacion_ In obj_cliente.tercero.terceroagrupacion_.Items
                    Dim Elemento As New CustomListItem
                    Elemento.objeto = terceroAgrupacion
                    Elemento.text = terceroAgrupacion.ToString
                    liv_TerceroAgrupaciones.Items.Add(Elemento)
                Next
            End If
        End If

        dtt_clientearticulo_.Clear()
        gdv_clientearticulo_.Tag.Clear()
        If Not IsNothing(obj_cliente.clientearticulo_) Then
            If Not IsNothing(obj_cliente.clientearticulo_.Items) Then
                For Each clientearticulo As cls_clientearticulo_ In obj_cliente.clientearticulo_.Items
                    Dim Item As DataRow = dtt_clientearticulo_.NewRow
                    Item("idarticulo") = clientearticulo.idarticulo
                    Item("Articulo") = clientearticulo.articulo.ToString
                    Dim listaprecioarticulo As New cls_listaprecioarticulo_
                    Item("Valor cliente") = 0
                    Item("Valor general") = 0
                    If listaprecioarticulo.BuscarXidarticuloXidclienteUltimo(clientearticulo.idarticulo, clientearticulo.idcliente) Then
                        Item("Valor cliente") = listaprecioarticulo.valor
                    End If
                    If listaprecioarticulo.BuscarXidarticuloUltimoGENERAL(clientearticulo.idarticulo) Then
                        Item("Valor general") = listaprecioarticulo.valor
                        If clientearticulo.idlistaprecio = 0 Then
                            Item("Valor cliente") = listaprecioarticulo.valor
                        End If
                    End If

                    'clientearticulo.relacion2
                    Item("Objeto") = clientearticulo
                    'If clientearticulo.primario Then
                    '    Item("Icono") = imc_defecto.Images(0)
                    'Else
                    '    Item("Icono") = Nothing
                    'End If
                    dtt_clientearticulo_.Rows.Add(Item)
                Next
            End If
        End If

        dtt_clientevehiculo_.Clear()
        gdv_clientevehiculo_.Tag.Clear()
        If Not IsNothing(obj_cliente.clientevehiculo_) Then
            If Not IsNothing(obj_cliente.clientevehiculo_.Items) Then
                For Each clientevehiculo As cls_clientevehiculo_ In obj_cliente.clientevehiculo_.Items
                    Dim Item As DataRow = dtt_clientevehiculo_.NewRow
                    Item("Vehiculo") = clientevehiculo.vehiculo.ToString
                    Item("Objeto") = clientevehiculo
                    If clientevehiculo.primario Then
                        Item("Icono") = imc_defecto.Images(0)
                    Else
                        Item("Icono") = Nothing
                    End If
                    dtt_clientevehiculo_.Rows.Add(Item)
                Next
            End If
        End If

        If str_interfaz = "Seguros" Then
            cargarInterfazSeguros()
        End If

        obj_cliente.tercero.terceroagrupacion_ = Nothing
        obj_cliente.tercero.tercerosubcategoria_ = Nothing
        obj_cliente.tercero.telefonoprimario = Nothing
        obj_cliente.tercero.direccionprimario = Nothing
        obj_cliente.tercero.emailprimario = Nothing
        obj_cliente.tercero.usuario_ = Nothing
        obj_cliente.tercero.email_ = Nothing
        obj_cliente.tercero.tercerorelacion_ = Nothing
        obj_cliente.tercero.telefono_ = Nothing
        obj_cliente.tercero.direccion_ = Nothing
        obj_cliente.tercero = Nothing
        obj_cliente.denominacion = Nothing
        obj_cliente.clientearticulo_ = Nothing
        obj_cliente.clientevehiculo_ = Nothing

        btn_Registro.Enabled = True

        Me.Show()
    End Sub


    Public Overrides Function ComprobarDatos() As Boolean
        If Not cbo_TipoProveedor.Enabled Then
            Return False
        End If
        'If Not cbo_TipoDocumento.Enabled Then
        '    ErrManagerShow("001008")
        '    Return False
        'End If
        'If Not cbo_CondicionFiscal.Enabled Then
        '    ErrManagerShow("001007")
        '    Return False
        'End If
        If Not ControlarValidaciones() Then
            ErrManagerShow("000004", Me)
            Return False
        End If

        'REGISTROS DUPLICADOS----------------------------------------------------
        Dim col As New Collections.Generic.List(Of stc_campoValor)
        Dim comp1 As New stc_campoValor
        comp1.campo = "numerofiscal"
        comp1.valor = txt_NumeroFiscal.Text
        col.Add(comp1)
        If ComprobarDuplicado("tercero_", col, "idtercero <> " & IIf(obj_cliente.idtercero = 0, 0, obj_cliente.idtercero)) Then
            ErrManagerShow("000010", Me, " Dato: Numero Fiscal")
            Return False
        End If
        'REGISTROS DUPLICADOS----------------------------------------------------
        Return True
    End Function

    Public Shadows Sub btn_Guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Guardar.Click
        If ComprobarDatos() Then
            'Guardo Cliente------------------------------------------------------
            obj_cliente.codigo = txt_Codigo.Text
            obj_cliente.razonsocial = txt_RazonSocial.Text
            obj_cliente.nombrefantasia = txt_NombreFantasia.Text
            obj_cliente.tipo = cbo_TipoProveedor.EditValue
            obj_cliente.idcobrador = cbo_cobrador.EditValue
            obj_cliente.idvendedor = cbo_vendedor.EditValue
            obj_cliente.idformapago = cbo_formaPago.EditValue
            obj_cliente.iddenominacion = cbo_denominacion.EditValue
            '----------------------------------------------------------------------

            'Guardo Tercero--------------------------------------------------------
            If IsNothing(obj_cliente.tercero) Then
                obj_cliente.tercero = New cls_tercero_
            End If
            obj_cliente.tercero.tipo = cls_tercero_.enu_tipotercero.Cliente
            obj_cliente.tercero.nombres = txt_Nombres.Text
            obj_cliente.tercero.apellido = txt_Apellido.Text
            obj_cliente.tercero.numerofiscal = txt_NumeroFiscal.Text
            obj_cliente.tercero.numeroducumento = txt_NumeroDocumento.Text
            obj_cliente.tercero.web = txt_SitioWeb.Text
            obj_cliente.tercero.observaciones = txt_Observaciones.Text
            obj_cliente.tercero.notas = txt_Notas.Text
            obj_cliente.tercero.idcondicioniva = cbo_CondicionFiscal.EditValue
            obj_cliente.tercero.idtipodocumento = cbo_TipoDocumento.EditValue
            obj_cliente.tercero.subcodigo1 = txt_subcodigo1.Text
            obj_cliente.tercero.subcodigo2 = txt_subcodigo2.Text
            obj_cliente.tercero.subcodigo3 = txt_subcodigo3.Text
            '--------------------------------------------------------------------

            'Guardo Direcciones---------------------------------------------------
            If IsNothing(obj_cliente.tercero.direccion_) Then
                obj_cliente.tercero.direccion_ = New cls_direccion_
            End If
            If IsNothing(obj_cliente.tercero.direccion_.Items) Then
                obj_cliente.tercero.direccion_.Items = New Collections.Generic.List(Of cls_direccion_)
            End If
            obj_cliente.tercero.direccion_.Items = New Collections.Generic.List(Of cls_direccion_)
            For Each Elemento As DevExpress.XtraEditors.Controls.ImageListBoxItem In liv_Direcciones.Items
                obj_cliente.tercero.direccion_.Items.Add(Elemento.Value.objeto)
            Next
            For Each Elemento As DevExpress.XtraEditors.Controls.ImageListBoxItem In liv_Direcciones.Tag
                If CType(Elemento.Value.objeto, cls_direccion_).iddireccion <> 0 Then
                    CType(Elemento.Value.objeto, cls_direccion_).Eliminar(CType(Elemento.Value.objeto, cls_direccion_).iddireccion)
                End If
            Next
            '---------------------------------------------------------------------

            'Guardo Telefonos------------------------------------------------------
            If IsNothing(obj_cliente.tercero.telefono_) Then
                obj_cliente.tercero.telefono_ = New cls_telefono_
            End If
            If IsNothing(obj_cliente.tercero.telefono_.Items) Then
                obj_cliente.tercero.telefono_.Items = New Collections.Generic.List(Of cls_telefono_)
            End If
            obj_cliente.tercero.telefono_.Items = New Collections.Generic.List(Of cls_telefono_)
            For Each Elemento As DevExpress.XtraEditors.Controls.ImageListBoxItem In liv_Telefonos.Items
                obj_cliente.tercero.telefono_.Items.Add(Elemento.Value.objeto)
            Next
            For Each Elemento As DevExpress.XtraEditors.Controls.ImageListBoxItem In liv_Telefonos.Tag
                If CType(Elemento.Value.objeto, cls_telefono_).idtelefono <> 0 Then
                    CType(Elemento.Value.objeto, cls_telefono_).Eliminar(CType(Elemento.Value.objeto, cls_telefono_).idtelefono)
                End If
            Next
            '---------------------------------------------------------------------

            'Guardo Relaciones------------------------------------------------------
            If IsNothing(obj_cliente.tercero.tercerorelacion_) Then
                obj_cliente.tercero.tercerorelacion_ = New cls_tercerorelacion_
            End If
            If IsNothing(obj_cliente.tercero.tercerorelacion_.Items) Then
                obj_cliente.tercero.tercerorelacion_.Items = New Collections.Generic.List(Of cls_tercerorelacion_)
            End If
            obj_cliente.tercero.tercerorelacion_.Items = New Collections.Generic.List(Of cls_tercerorelacion_)
            For Each Elemento As CustomListItem In liv_TerceroRelaciones.Items
                obj_cliente.tercero.tercerorelacion_.Items.Add(Elemento.objeto)
            Next
            For Each Elemento As CustomListItem In liv_TerceroRelaciones.Tag
                If CType(Elemento.objeto, cls_tercerorelacion_).idtercerorelacion <> 0 Then
                    CType(Elemento.objeto, cls_tercerorelacion_).Eliminar(CType(Elemento.objeto, cls_tercerorelacion_).idtercerorelacion)
                End If
            Next
            '-----------------------------------------------------------------------

            'Guardo Emails------------------------------------------------------
            If IsNothing(obj_cliente.tercero.email_) Then
                obj_cliente.tercero.email_ = New cls_email_
            End If
            If IsNothing(obj_cliente.tercero.email_.Items) Then
                obj_cliente.tercero.email_.Items = New Collections.Generic.List(Of cls_email_)
            End If
            obj_cliente.tercero.email_.Items = New Collections.Generic.List(Of cls_email_)
            For Each Elemento As DevExpress.XtraEditors.Controls.ImageListBoxItem In liv_Emails.Items
                obj_cliente.tercero.email_.Items.Add(Elemento.Value.objeto)
            Next
            For Each Elemento As DevExpress.XtraEditors.Controls.ImageListBoxItem In liv_Emails.Tag
                If CType(Elemento.Value.objeto, cls_email_).idemail <> 0 Then
                    CType(Elemento.Value.objeto, cls_email_).Eliminar(CType(Elemento.Value.objeto, cls_email_).idemail)
                End If
            Next
            '-----------------------------------------------------------------------

            'Guardo usuarios------------------------------------------------------
            If IsNothing(obj_cliente.tercero.usuario_) Then
                obj_cliente.tercero.usuario_ = New cls_usuario_
            End If
            If IsNothing(obj_cliente.tercero.usuario_.Items) Then
                obj_cliente.tercero.usuario_.Items = New Collections.Generic.List(Of cls_usuario_)
            End If
            obj_cliente.tercero.usuario_.Items = New Collections.Generic.List(Of cls_usuario_)
            For Each Elemento As CustomListItem In liv_Usuarios.Items
                obj_cliente.tercero.usuario_.Items.Add(Elemento.objeto)
            Next
            For Each Elemento As CustomListItem In liv_Usuarios.Tag
                If CType(Elemento.objeto, cls_usuario_).idusuario <> 0 Then
                    CType(Elemento.objeto, cls_usuario_).Eliminar(CType(Elemento.objeto, cls_usuario_).idusuario)
                End If
            Next
            '-----------------------------------------------------------------------

            'Guardo subcategorias------------------------------------------------------
            If IsNothing(obj_cliente.tercero.tercerosubcategoria_) Then
                obj_cliente.tercero.tercerosubcategoria_ = New cls_tercerosubcategoria_
            End If
            If IsNothing(obj_cliente.tercero.tercerosubcategoria_.Items) Then
                obj_cliente.tercero.tercerosubcategoria_.Items = New Collections.Generic.List(Of cls_tercerosubcategoria_)
            End If
            obj_cliente.tercero.tercerosubcategoria_.Items = New Collections.Generic.List(Of cls_tercerosubcategoria_)
            For Each Elemento As CustomListItem In liv_TerceroSubCategorias.Items
                obj_cliente.tercero.tercerosubcategoria_.Items.Add(Elemento.objeto)
            Next
            For Each Elemento As CustomListItem In liv_TerceroSubCategorias.Tag
                If CType(Elemento.objeto, cls_tercerosubcategoria_).idtercerosubcategoria <> 0 Then
                    CType(Elemento.objeto, cls_tercerosubcategoria_).Eliminar(CType(Elemento.objeto, cls_tercerosubcategoria_).idtercerosubcategoria)
                End If
            Next
            '---------------------------------------------------------------------


            'Guardo Agrupaciones------------------------------------------------------
            If IsNothing(obj_cliente.tercero.terceroagrupacion_) Then
                obj_cliente.tercero.terceroagrupacion_ = New cls_terceroagrupacion_
            End If
            If IsNothing(obj_cliente.tercero.terceroagrupacion_.Items) Then
                obj_cliente.tercero.terceroagrupacion_.Items = New Collections.Generic.List(Of cls_terceroagrupacion_)
            End If
            obj_cliente.tercero.terceroagrupacion_.Items = New Collections.Generic.List(Of cls_terceroagrupacion_)
            For Each Elemento As CustomListItem In liv_TerceroAgrupaciones.Items
                obj_cliente.tercero.terceroagrupacion_.Items.Add(Elemento.objeto)
            Next
            For Each Elemento As CustomListItem In liv_TerceroAgrupaciones.Tag
                If CType(Elemento.objeto, cls_terceroagrupacion_).idterceroagrupacion <> 0 Then
                    CType(Elemento.objeto, cls_terceroagrupacion_).Eliminar(CType(Elemento.objeto, cls_terceroagrupacion_).idterceroagrupacion)
                End If
            Next
            '---------------------------------------------------------------------

            'Guardo clientearticulo_------------------------------------------------------
            If IsNothing(obj_cliente.clientearticulo_) Then
                obj_cliente.clientearticulo_ = New cls_clientearticulo_
            End If
            If IsNothing(obj_cliente.clientearticulo_.Items) Then
                obj_cliente.clientearticulo_.Items = New Collections.Generic.List(Of cls_clientearticulo_)
            End If
            obj_cliente.clientearticulo_.Items = New Collections.Generic.List(Of cls_clientearticulo_)
            For Each Elemento As DataRow In dtt_clientearticulo_.Rows
                obj_cliente.clientearticulo_.Items.Add(Elemento("Objeto"))
            Next
            For Each Elemento As cls_clientearticulo_ In gdv_clientearticulo_.Tag
                If Elemento.idclientearticulo <> 0 Then
                    Elemento.Eliminar(Elemento.idclientearticulo)
                End If
            Next
            '---------------------------------------------------------------------

            'Guardo clientevehiculo_------------------------------------------------------
            If IsNothing(obj_cliente.clientevehiculo_) Then
                obj_cliente.clientevehiculo_ = New cls_clientevehiculo_
            End If
            If IsNothing(obj_cliente.clientevehiculo_.Items) Then
                obj_cliente.clientevehiculo_.Items = New Collections.Generic.List(Of cls_clientevehiculo_)
            End If
            obj_cliente.clientevehiculo_.Items = New Collections.Generic.List(Of cls_clientevehiculo_)
            For Each Elemento As DataRow In dtt_clientevehiculo_.Rows
                obj_cliente.clientevehiculo_.Items.Add(Elemento("Objeto"))
            Next
            For Each Elemento As cls_clientevehiculo_ In gdv_clientevehiculo_.Tag
                If Elemento.idclientevehiculo <> 0 Then
                    Elemento.Eliminar(Elemento.idclientevehiculo)
                End If
            Next
            '---------------------------------------------------------------------

            If txt_ID.Text = "" Then
                obj_cliente.Nuevo(True)
                If frm_listado.Visible Then
                    ulg_row = CType(frm_listado, xtf_LISTADOcliente_).AgregarItem(obj_cliente)
                End If
                Modificar(obj_cliente, frm_listado, ulg_row)
            Else
                obj_cliente.Modificar()
                If frm_listado.Visible Then
                    frm_listado.ModificarItem(obj_cliente, ulg_row)
                End If
                Modificar(obj_cliente, frm_listado, ulg_row)
            End If
            flg_Modificado = False : btn_Guardar.Enabled = False : bbi_guardar.Enabled = False
        End If
    End Sub

    Private Sub btn_Registro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Registro.Click
        If Not IsNothing(obj_cliente.tercero.registro) Then
            Dim ABMRegistro As New xtf_ABMRegistro(obj_cliente.tercero.registro)
            If ABMRegistro.ShowDialog() = Windows.Forms.DialogResult.OK Then
                flg_Modificado = True
            End If
        End If
    End Sub

    Private Sub btn_Cerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Cerrar.Click
        If flg_Modificado Then
            bol_comprobarCerrado = False
            Select Case ErrManagerShow("000001", Me)
                Case Windows.Forms.DialogResult.Yes
                    If ComprobarDatos() Then
                        btn_Guardar_Click(Nothing, Nothing)
                    Else
                        Exit Sub
                    End If
                Case Windows.Forms.DialogResult.Cancel : bol_comprobarCerrado = True
                    Exit Sub
            End Select
        End If
        Me.Dispose()
    End Sub


#Region "Direcciones"

    Private Sub liv_Direcciones_ItemDoubleClick(ByVal sender As Object, ByVal e As EventArgs) Handles liv_Direcciones.DoubleClick
        tsb_DireccionesModificar.PerformClick()
    End Sub

    Private Sub tsb_DireccionesNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_DireccionesNuevo.Click
        Dim ABMDireccion As New xtf_ABMdireccion
        If ABMDireccion.ShowDialog = Windows.Forms.DialogResult.OK Then
            liv_Direcciones.BeginUpdate()
            Dim Item As New DevExpress.XtraEditors.Controls.ImageListBoxItem
            Dim Elemento As New CustomListItem
            Elemento.objeto = ABMDireccion.obj_direccion
            Elemento.text = ABMDireccion.obj_direccion.ToString
            Item.Value = Elemento
            liv_Direcciones.Items.Add(Item)
            liv_Direcciones.EndUpdate()
        End If
    End Sub

    Private Sub tsb_DireccionesModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_DireccionesModificar.Click
        If liv_Direcciones.SelectedItems.Count > 0 Then
            Dim ABMDireccion As New xtf_ABMdireccion
            ABMDireccion.Modificar(liv_Direcciones.SelectedItems(0).value.objeto)
            If ABMDireccion.ShowDialog = Windows.Forms.DialogResult.OK Then
                liv_Direcciones.BeginUpdate()
                liv_Direcciones.SelectedItems(0).value.objeto = ABMDireccion.obj_direccion
                liv_Direcciones.SelectedItems(0).value.text = ABMDireccion.obj_direccion.ToString
                liv_Direcciones.EndUpdate()
            End If
        End If
    End Sub

    Private Sub tsb_DireccionesEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_DireccionesEliminar.Click
        If liv_Direcciones.SelectedItems.Count > 0 Then
            liv_Direcciones.BeginUpdate()
            Dim Elemento As DevExpress.XtraEditors.Controls.ImageListBoxItem
            Elemento = liv_Direcciones.SelectedItems(0)
            liv_Direcciones.Items.Remove(Elemento)
            liv_Direcciones.Tag.add(Elemento)
            liv_Direcciones.EndUpdate()
        End If
    End Sub

    Private Sub tsb_DireccionesDefecto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_DireccionesDefecto.Click
        If liv_Direcciones.SelectedItems.Count > 0 Then
            For Each Elemento As DevExpress.XtraEditors.Controls.ImageListBoxItem In liv_Direcciones.Items
                CType(Elemento.Value.objeto, cls_direccion_).primario = False
                Elemento.ImageIndex = -1
            Next
            CType(liv_Direcciones.SelectedItems(0).Value.objeto, cls_direccion_).primario = True
            liv_Direcciones.SelectedItems(0).imageindex = 0
        End If
    End Sub
#End Region

#Region "Emails"
    Private Sub liv_emails_ItemDoubleClick(ByVal sender As Object, ByVal e As EventArgs) Handles liv_Emails.DoubleClick
        tsb_EmailsModificar.PerformClick()
    End Sub

    Private Sub tsb_EmailsNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_EmailsNuevo.Click
        Dim ABMemail As New xtf_ABMemail
        If ABMemail.ShowDialog = Windows.Forms.DialogResult.OK Then
            liv_Emails.BeginUpdate()
            Dim Item As New DevExpress.XtraEditors.Controls.ImageListBoxItem
            Dim Elemento As New CustomListItem
            Elemento.objeto = ABMemail.obj_email
            Elemento.text = ABMemail.obj_email.ToString
            Item.ImageIndex = -1
            Item.Value = Elemento
            liv_Emails.Items.Add(Item)
            liv_Emails.EndUpdate()
        End If
    End Sub

    Private Sub tsb_EmailsModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_EmailsModificar.Click
        If liv_Emails.SelectedItems.Count > 0 Then
            Dim ABMemail As New xtf_ABMemail
            ABMemail.Modificar(CType(liv_Emails.SelectedItems(0).value, CustomListItem).objeto)
            If ABMemail.ShowDialog = Windows.Forms.DialogResult.OK Then
                liv_Emails.BeginUpdate()
                liv_Emails.SelectedItems(0).value.objeto = ABMemail.obj_email
                liv_Emails.SelectedItems(0).value.text = ABMemail.obj_email.ToString
                liv_Emails.EndUpdate()
            End If
        End If
    End Sub

    Private Sub tsb_EmailsEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_EmailsEliminar.Click
        If liv_Emails.SelectedItems.Count > 0 Then
            liv_Emails.BeginUpdate()
            Dim Elemento As DevExpress.XtraEditors.Controls.ImageListBoxItem
            Elemento = liv_Emails.SelectedItems(0)
            liv_Emails.Items.Remove(Elemento)
            liv_Emails.Tag.add(Elemento)
            liv_Emails.EndUpdate()
        End If
    End Sub

    Private Sub tsb_EmailsDefecto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_EmailsDefecto.Click
        If liv_Emails.SelectedItems.Count > 0 Then
            For Each Elemento As DevExpress.XtraEditors.Controls.ImageListBoxItem In liv_Emails.Items
                CType(Elemento.Value.objeto, cls_email_).primario = False
                Elemento.ImageIndex = -1
            Next
            CType(liv_Emails.SelectedItems(0).Value.objeto, cls_email_).primario = True
            liv_Emails.SelectedItems(0).ImageIndex = 0
        End If
    End Sub
#End Region

#Region "Telefonos"

    Private Sub liv_Telefonos_ItemDoubleClick(ByVal sender As Object, ByVal e As EventArgs) Handles liv_Telefonos.DoubleClick
        tsb_TelefonosModificar.PerformClick()
    End Sub

    Private Sub tsb_TelefonosNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_TelefonosNuevo.Click
        Dim ABMtelefono As New xtf_ABMtelefono
        If ABMtelefono.ShowDialog = Windows.Forms.DialogResult.OK Then
            liv_Telefonos.BeginUpdate()
            Dim Elemento As New CustomListItem
            Dim Item As New DevExpress.XtraEditors.Controls.ImageListBoxItem
            Elemento.objeto = ABMtelefono.obj_telefono
            Elemento.text = ABMtelefono.obj_telefono.ToString
            Item.ImageIndex = -1
            Item.Value = Elemento
            liv_Telefonos.Items.Add(Item)
            liv_Telefonos.EndUpdate()
        End If
    End Sub

    Private Sub tsb_TelefonosModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_TelefonosModificar.Click
        If liv_Telefonos.SelectedItems.Count > 0 Then
            Dim ABMtelefono As New xtf_ABMtelefono
            ABMtelefono.Modificar(liv_Telefonos.SelectedItems(0).value.objeto)
            If ABMtelefono.ShowDialog = Windows.Forms.DialogResult.OK Then
                liv_Telefonos.BeginUpdate()
                liv_Telefonos.SelectedItems(0).value.objeto = ABMtelefono.obj_telefono
                liv_Telefonos.SelectedItems(0).value.text = ABMtelefono.obj_telefono.ToString
                liv_Telefonos.EndUpdate()
            End If
        End If
    End Sub


    Private Sub tsb_TelefonosEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_TelefonosEliminar.Click
        If liv_Telefonos.SelectedItems.Count > 0 Then
            liv_Telefonos.BeginUpdate()
            Dim Elemento As DevExpress.XtraEditors.Controls.ImageListBoxItem
            Elemento = liv_Telefonos.SelectedItems(0)
            liv_Telefonos.Items.Remove(Elemento)
            liv_Telefonos.Tag.add(Elemento)
            liv_Telefonos.EndUpdate()
        End If
    End Sub

    Private Sub tsb_TelefonosDefecto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_TelefonosDefecto.Click
        If liv_Telefonos.SelectedItems.Count > 0 Then
            For Each Elemento As DevExpress.XtraEditors.Controls.ImageListBoxItem In liv_Telefonos.Items
                CType(Elemento.Value.objeto, cls_telefono_).primario = False
                Elemento.ImageIndex = -1
            Next
            CType(liv_Telefonos.SelectedItems(0).Value.objeto, cls_telefono_).primario = True
            liv_Telefonos.SelectedItems(0).ImageIndex = 0
        End If
    End Sub
#End Region

#Region "Relacion"

    Private Sub liv_TerceroRelacion_ItemDoubleClick(ByVal sender As Object, ByVal e As EventArgs) Handles liv_TerceroRelaciones.DoubleClick
        tsb_ContactoModificar.PerformClick()
    End Sub

    Private Sub tsb_ContactoNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_ContactoNuevo.Click
        If liv_TerceroRelaciones.SelectedItems.Count = 0 Then
            Dim ABMtercerorelacion As New xtf_ABMtercerorelacion
            If ABMtercerorelacion.ShowDialog = Windows.Forms.DialogResult.OK Then
                liv_TerceroRelaciones.BeginUpdate()
                Dim Elemento As New CustomListItem
                Elemento.objeto = ABMtercerorelacion.obj_tercerorelacion
                Elemento.text = ABMtercerorelacion.obj_tercerorelacion.ToString
                liv_TerceroRelaciones.Items.Clear()
                liv_TerceroRelaciones.Items.Add(Elemento)
                liv_TerceroRelaciones.EndUpdate()
            End If
        Else
            liv_TerceroRelaciones.SelectedIndex = 0
            tsb_ContactoModificar_Click(Nothing, Nothing)
        End If
    End Sub

    Private Sub tsb_ContactoModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_ContactoModificar.Click
        If liv_TerceroRelaciones.SelectedItems.Count > 0 Then
            Dim ABMtercerorelacion As New xtf_ABMtercerorelacion
            ABMtercerorelacion.Modificar(liv_TerceroRelaciones.SelectedItems(0).objeto)
            If ABMtercerorelacion.ShowDialog = Windows.Forms.DialogResult.OK Then
                liv_TerceroRelaciones.BeginUpdate()
                liv_TerceroRelaciones.SelectedItems(0).objeto = ABMtercerorelacion.obj_tercerorelacion
                liv_TerceroRelaciones.SelectedItems(0).text = ABMtercerorelacion.obj_tercerorelacion.ToString
                liv_TerceroRelaciones.EndUpdate()
            End If
        End If
    End Sub

    Private Sub tsb_ContactoEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_ContactoEliminar.Click
        If liv_TerceroRelaciones.SelectedItems.Count > 0 Then
            liv_TerceroRelaciones.BeginUpdate()
            Dim Elemento As CustomListItem
            Elemento = liv_TerceroRelaciones.SelectedItems(0)
            liv_TerceroRelaciones.Items.Remove(Elemento)
            liv_TerceroRelaciones.Tag.add(Elemento)
            liv_TerceroRelaciones.EndUpdate()
        End If
    End Sub
#End Region

#Region "Usuario"
    Private Sub liv_usuario_ItemDoubleClick(ByVal sender As Object, ByVal e As EventArgs) Handles liv_Usuarios.DoubleClick
        tsb_UsuarioModificar.PerformClick()
    End Sub

    Private Sub tsb_UsuarioNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_UsuarioNuevo.Click
        If liv_Usuarios.SelectedItems.Count = 0 Then
            Dim ABMusuario As New xtf_ABMusuario2
            If ABMusuario.ShowDialog = Windows.Forms.DialogResult.OK Then
                liv_Usuarios.BeginUpdate()
                Dim Elemento As New CustomListItem
                Elemento.objeto = ABMusuario.obj_usuario
                Elemento.text = ABMusuario.obj_usuario.ToString
                liv_Usuarios.Items.Clear()
                liv_Usuarios.Items.Add(Elemento)
                liv_Usuarios.EndUpdate()
            End If
        Else
            liv_Usuarios.SelectedIndex = 0
            tsb_UsuarioModificar_Click(Nothing, Nothing)
        End If
    End Sub

    Private Sub tsb_UsuarioModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_UsuarioModificar.Click
        If liv_Usuarios.SelectedItems.Count > 0 Then
            Dim ABMusuario As New xtf_ABMusuario2
            ABMusuario.Modificar(liv_Usuarios.SelectedItems(0).objeto)
            If ABMusuario.ShowDialog = Windows.Forms.DialogResult.OK Then
                liv_Usuarios.BeginUpdate()
                liv_Usuarios.SelectedItems(0).objeto = ABMusuario.obj_usuario
                liv_Usuarios.SelectedItems(0).text = ABMusuario.obj_usuario.ToString
                liv_Usuarios.EndUpdate()
            End If
        End If
    End Sub

    Private Sub tsb_UsuarioEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_UsuarioEliminar.Click
        If liv_Usuarios.SelectedItems.Count > 0 Then
            liv_Usuarios.BeginUpdate()
            Dim Elemento As CustomListItem
            Elemento = liv_Usuarios.SelectedItems(0)
            liv_Usuarios.Items.Remove(Elemento)
            liv_Usuarios.Tag.add(Elemento)
            liv_Usuarios.EndUpdate()
        End If
    End Sub
#End Region

#Region "Agrupaciones"
    Private Sub btn_AgregarA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_AgregarA.Click
        For i As Integer = 0 To liv_Agrupaciones.SelectedItems.Count - 1
            Dim Elemento As New CustomListItem '= liv_Agrupaciones.SelectedItems(0)
            Elemento.objeto = New cls_terceroagrupacion_
            CType(Elemento.objeto, cls_terceroagrupacion_).idagrupacion = CType(CType(liv_Agrupaciones.SelectedItems(i), CustomListItem).objeto, cls_agrupacion_).idAgrupacion
            Elemento.text = Elemento.objeto.ToString
            Dim flag As Boolean = False
            For Each customitem As CustomListItem In liv_TerceroAgrupaciones.Items
                Dim terceroAgrupacion As cls_terceroagrupacion_ = customitem.objeto
                If terceroAgrupacion.idagrupacion = CType(Elemento.objeto, cls_terceroagrupacion_).idagrupacion Then
                    flag = True
                End If
            Next
            If flag = False Then
                liv_TerceroAgrupaciones.Items.Add(Elemento)
            End If
        Next
    End Sub

    Private Sub btn_AgregarTodosA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_AgregarTodosA.Click
        For i As Integer = 0 To liv_Agrupaciones.Items.Count - 1
            Dim Elemento As New CustomListItem '= liv_Agrupaciones.SelectedItems(0)
            Elemento.objeto = New cls_terceroagrupacion_
            CType(Elemento.objeto, cls_terceroagrupacion_).idagrupacion = CType(CType(liv_Agrupaciones.Items(i), CustomListItem).objeto, cls_agrupacion_).idagrupacion
            Elemento.text = Elemento.objeto.ToString
            Dim flag As Boolean = False
            For Each customitem As CustomListItem In liv_TerceroAgrupaciones.Items
                Dim terceroAgrupacion As cls_terceroagrupacion_ = customitem.objeto
                If terceroAgrupacion.idagrupacion = CType(Elemento.objeto, cls_terceroagrupacion_).idagrupacion Then
                    flag = True
                End If
            Next
            If flag = False Then
                liv_TerceroAgrupaciones.Items.Add(Elemento)
            End If
        Next
    End Sub

    Private Sub btn_QuitarA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_QuitarA.Click
        If liv_TerceroAgrupaciones.SelectedItems.Count > 0 Then
            For i As Integer = liv_TerceroAgrupaciones.SelectedItems.Count - 1 To 0 Step -1
                Dim Elemento As CustomListItem
                Elemento = liv_TerceroAgrupaciones.SelectedItems(i)
                liv_TerceroAgrupaciones.Items.Remove(Elemento)
                liv_TerceroAgrupaciones.Tag.add(Elemento)
            Next
        End If
    End Sub

    Private Sub btn_QuitarTodosA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_QuitarTodosA.Click
        If liv_TerceroAgrupaciones.Items.Count > 0 Then
            For i As Integer = liv_TerceroAgrupaciones.Items.Count - 1 To 0 Step -1
                Dim Elemento As CustomListItem
                Elemento = liv_TerceroAgrupaciones.Items(i)
                liv_TerceroAgrupaciones.Items.Remove(Elemento)
                liv_TerceroAgrupaciones.Tag.add(Elemento)
            Next
        End If
    End Sub
#End Region

#Region "clientearticulo"

    Private Sub tsb_clientearticuloNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_clientearticuloNuevo.Click
        If (cbo_articulo.EditValue <> 0) Then


            gdv_clientearticulo_.BeginDataUpdate()
            Dim Item As DataRow = dtt_clientearticulo_.NewRow

            Dim clientearticulo As New cls_clientearticulo_
            clientearticulo.idarticulo = cbo_articulo.EditValue
            clientearticulo.valor = txt_valor.Text
            If txt_valorgeneral.Text = txt_valor.Text Then
                clientearticulo.idlistaprecio = 0
            Else
                clientearticulo.idlistaprecio = -1
            End If

            Item("idarticulo") = clientearticulo.idarticulo
            Item("Articulo") = clientearticulo.articulo.ToString
            Item("Valor general") = txt_valorgeneral.Text  'clientearticulo
            Item("Valor cliente") = txt_valor.Text  'clientearticulo.relacion2
            Item("Objeto") = clientearticulo

            dtt_clientearticulo_.Rows.Add(Item)
            gdv_clientearticulo_.EndDataUpdate()
        End If
    End Sub

    Private Sub tsb_clientearticuloEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_clientearticuloEliminar.Click
        If gdv_clientearticulo_.SelectedRowsCount > 0 Then
            gdv_clientearticulo_.BeginDataUpdate()
            gdv_clientearticulo_.Tag.add(gdv_clientearticulo_.GetDataRow(gdv_clientearticulo_.GetSelectedRows(0))("Objeto"))
            dtt_clientearticulo_.Rows.Remove(gdv_clientearticulo_.GetDataRow(gdv_clientearticulo_.GetSelectedRows(0)))
            gdv_clientearticulo_.EndDataUpdate()
        End If
    End Sub

#End Region

#Region "clientevehiculo"

    Private Sub tsb_clientevehiculoNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_clientevehiculoNuevo.Click
        If cbo_vehiculo.EditValue <> 0 Then
            gdv_clientevehiculo_.BeginDataUpdate()
            Dim Item As DataRow = dtt_clientevehiculo_.NewRow
            Dim clientevehiculo As New cls_clientevehiculo_
            clientevehiculo.idvehiculo = cbo_vehiculo.EditValue
            Item("Vehiculo") = clientevehiculo.vehiculo.ToString
            Item("Objeto") = clientevehiculo

            dtt_clientevehiculo_.Rows.Add(Item)
            gdv_clientevehiculo_.EndDataUpdate()
        End If
    End Sub

    Private Sub gdv_clientevehiculo__CustomUnboundColumnData(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs) Handles gdv_clientevehiculo_.CustomUnboundColumnData
        e.Value = imc_defecto.Images
    End Sub

    Private Sub tsb_clientevehiculoEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_clientevehiculoEliminar.Click
        If gdv_clientevehiculo_.SelectedRowsCount > 0 Then
            gdv_clientevehiculo_.BeginDataUpdate()
            gdv_clientevehiculo_.Tag.add(gdv_clientevehiculo_.GetDataRow(gdv_clientevehiculo_.GetSelectedRows(0))("Objeto"))
            dtt_clientevehiculo_.Rows.Remove(gdv_clientevehiculo_.GetDataRow(gdv_clientevehiculo_.GetSelectedRows(0)))
            gdv_clientevehiculo_.EndDataUpdate()
        End If
    End Sub

    Private Sub tsb_UnidadDefecto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_clientevehiculoDefecto.Click
        If gdv_clientevehiculo_.SelectedRowsCount > 0 Then
            For Each row As DataRow In dtt_clientevehiculo_.Rows
                CType(row("objeto"), cls_clientevehiculo_).primario = False
                row("Icono") = Nothing
            Next
            CType(gdv_clientevehiculo_.GetDataRow(gdv_clientevehiculo_.GetSelectedRows(0))("Objeto"), cls_clientevehiculo_).primario = True
            gdv_clientevehiculo_.GetDataRow(gdv_clientevehiculo_.GetSelectedRows(0))("Icono") = imc_defecto.Images(0)
        End If
    End Sub

#End Region

    Private Sub liv_Categorias_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles liv_Categorias.SelectedIndexChanged
        CargarSubCategoria_()
    End Sub

    Private Sub btn_Agregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Agregar.Click
        For i As Integer = 0 To liv_SubCategorias.SelectedItems.Count - 1
            Dim Elemento As New CustomListItem '= liv_SubCategorias.SelectedItems(0)
            Elemento.objeto = New cls_tercerosubcategoria_
            CType(Elemento.objeto, cls_tercerosubcategoria_).idsubcategoria = CType(CType(liv_SubCategorias.SelectedItems(i), CustomListItem).objeto, cls_subcategoria_).idsubcategoria
            Elemento.text = Elemento.objeto.ToString
            Dim flag As Boolean = False
            For Each customitem As CustomListItem In liv_TerceroSubCategorias.Items
                Dim tercerosubcategoria As cls_tercerosubcategoria_ = customitem.objeto
                If tercerosubcategoria.idsubcategoria = CType(Elemento.objeto, cls_tercerosubcategoria_).idsubcategoria Then
                    flag = True
                End If
            Next
            If flag = False Then
                liv_TerceroSubCategorias.Items.Add(Elemento)
            End If
        Next
    End Sub

    Private Sub btn_AgregarTodos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_AgregarTodos.Click
        For i As Integer = 0 To liv_SubCategorias.Items.Count - 1
            Dim Elemento As New CustomListItem '= liv_SubCategorias.SelectedItems(0)
            Elemento.objeto = New cls_tercerosubcategoria_
            CType(Elemento.objeto, cls_tercerosubcategoria_).idsubcategoria = CType(CType(liv_SubCategorias.Items(i), CustomListItem).objeto, cls_subcategoria_).idsubcategoria
            Elemento.text = Elemento.objeto.ToString
            Dim flag As Boolean = False
            For Each customitem As CustomListItem In liv_TerceroSubCategorias.Items
                Dim tercerosubcategoria As cls_tercerosubcategoria_ = customitem.objeto
                If tercerosubcategoria.idsubcategoria = CType(Elemento.objeto, cls_tercerosubcategoria_).idsubcategoria Then
                    flag = True
                End If
            Next
            If flag = False Then
                liv_TerceroSubCategorias.Items.Add(Elemento)
            End If
        Next
    End Sub

    Private Sub btn_Quitar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Quitar.Click
        If liv_TerceroSubCategorias.SelectedItems.Count > 0 Then
            For i As Integer = liv_TerceroSubCategorias.SelectedItems.Count - 1 To 0 Step -1
                Dim Elemento As CustomListItem
                Elemento = liv_TerceroSubCategorias.SelectedItems(i)
                liv_TerceroSubCategorias.Items.Remove(Elemento)
                liv_TerceroSubCategorias.Tag.add(Elemento)
            Next
        End If
    End Sub

    Private Sub btn_QuitarTodos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_QuitarTodos.Click
        If liv_TerceroSubCategorias.Items.Count > 0 Then
            For i As Integer = liv_TerceroSubCategorias.Items.Count - 1 To 0 Step -1
                Dim Elemento As CustomListItem
                Elemento = liv_TerceroSubCategorias.Items(i)
                liv_TerceroSubCategorias.Items.Remove(Elemento)
                liv_TerceroSubCategorias.Tag.add(Elemento)
            Next
        End If
    End Sub

    Private Sub btn_Acceso_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Acceso.Click
        If ComprobarPermiso("004001006") Then
            Dim obj_ABMconfig_acceso As New xtf_ABMconfig_acceso(obj_cliente.idtercero)
            obj_ABMconfig_acceso.ShowDialog()
        End If
    End Sub

    Private Sub cbo_Opcional_ButtonClick(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.Controls.ButtonPressedEventArgs) Handles cbo_vendedor.ButtonClick, cbo_cobrador.ButtonClick, cbo_formaPago.ButtonClick
        If e.Button.Kind = DevExpress.XtraEditors.Controls.ButtonPredefines.Delete Then
            sender.editvalue = Nothing
        End If
    End Sub

    Private Sub cargarInterfazSeguros()
        lcg_InterfazSeguros.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always
        lbl_interfazSubcodigo1.Text = obj_cliente.tercero.subcodigo1
        lbl_interfazEncabezamiento.Text = ""
        lbl_interfazNombre.Text = obj_cliente.tercero.nombres
        If Not IsNothing(obj_cliente.tercero.direccionprimario) Then
            lbl_interfazDireccion.Text = obj_cliente.tercero.direccionprimario.domicilio
            If Not IsNothing(obj_cliente.tercero.direccionprimario.provincia) Then
                lbl_interfazProvincia.Text = obj_cliente.tercero.direccionprimario.provincia.ToString
            End If
            If Not IsNothing(obj_cliente.tercero.direccionprimario.localidad) Then
                lbl_interfazLocalidad.Text = obj_cliente.tercero.direccionprimario.localidad.nombre
            End If
            If Not IsNothing(obj_cliente.tercero.direccionprimario.barrio) Then
                lbl_interfazLocalidad.Text &= " - " & obj_cliente.tercero.direccionprimario.barrio.nombre
            End If
        End If

        If Not IsNothing(obj_cliente.tercero.telefonoprimario) Then
            lbl_interfazTelefono.Text = obj_cliente.tercero.telefonoprimario.numero
        End If
        lbl_interfazAtencion.Text = ""
        If Not IsNothing(obj_cliente.tercero.condicioniva) Then
            lbl_interfazCondicionIVA.Text = obj_cliente.tercero.condicioniva.ToString
        End If
        lbl_interfazNumeroIVA.Text = obj_cliente.tercero.numeroducumento
        If Not IsNothing(obj_cliente.formapago) Then
            lbl_interfazFormaPago.Text = obj_cliente.formapago.ToString
        End If
        lbl_interfazDatosFormaPago.Text = ""
        If Not IsNothing(obj_cliente.vendedor) Then
            lbl_interfazProductor.Text = obj_cliente.vendedor.ToString
        End If
        lbl_interfazSubProductor.Text = ""
        If Not IsNothing(obj_cliente.cobrador) Then
            lbl_interfazCobrador.Text = obj_cliente.cobrador.ToString
        End If
        lbl_interfazGrupoCliente.Text = ""
        If Not IsNothing(obj_cliente.registro) Then
            lbl_interfazFechaAlta.Text = obj_cliente.registro.fechacreado
        End If

        lbl_interfazFechaNacimiento.Text = ""
        lbl_interfazObservaciones.Text = obj_cliente.tercero.observaciones
    End Sub

    Private Sub txt_NombreFantasia_EditValueChanged(sender As System.Object, e As System.EventArgs) Handles txt_NombreFantasia.EditValueChanged

    End Sub

    Private Sub txt_NombreFantasia_Validated(sender As Object, e As System.EventArgs) Handles txt_NombreFantasia.Validated
        If txt_RazonSocial.Text = "" Then
            txt_RazonSocial.Text = txt_NombreFantasia.Text
        End If
    End Sub

    Private Sub cbo_articulo_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbo_articulo.EditValueChanged
        Dim listaprecioarticulo As New cls_listaprecioarticulo_
        If listaprecioarticulo.BuscarXidarticuloUltimoGENERAL(cbo_articulo.EditValue) Then
            txt_valorgeneral.Text = listaprecioarticulo.valor
            txt_valor.Text = listaprecioarticulo.valor
            txt_valorgeneral.Tag = listaprecioarticulo.idlistaprecio
        Else
            txt_valorgeneral.Tag = 0
            txt_valorgeneral.Text = 0
            txt_valor.Text = 0
        End If
    End Sub

    Private Sub gdv_clientearticulo__CellValueChanged(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs) Handles gdv_clientearticulo_.CellValueChanged
        Dim clientearticulo As cls_clientearticulo_ = gdv_clientearticulo_.GetDataRow(e.RowHandle)("Objeto")
        If clientearticulo.valor <> e.Value Then
            clientearticulo.valor = e.Value
            clientearticulo.idlistaprecio = -1
        End If
    End Sub

    Private Sub gdc_clientevehiculo__Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles gdc_clientevehiculo_.Click

    End Sub

    Private Sub cbo_CondicionFiscal_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbo_CondicionFiscal.EditValueChanged
        Dim condicionIVA As New cls_condicioniva_
        If condicionIVA.Buscar(cbo_CondicionFiscal.EditValue) Then
            If Not IsNothing(condicionIVA.siglafiscal) Then
                txt_SiglaFiscal.Text = condicionIVA.siglafiscal.ToString
            End If
        Else
            txt_SiglaFiscal.Text = ""
        End If
    End Sub
End Class
